<?php
/**
 * Controle de Papel
 * @filesource  24/12/2011
 * @author      Estrada Virtual <http://estradavirtual.com.br>
 * @copyright   Copyright <2011> Estrada Virtual
 * @package     <<application>>
 * @subpackage  <<application>>.application.controllers
 * @version     $Id$
 */
class PapelController extends Ev_Controller_Crud
{
    protected $_aCamposListagem = array('st_codigo', 'st_nome');

    public function listarAction()
    {
        $fk_cliente = $this->_getParam('fk_cliente');

        $sql = 'select c.id_cliente, c.st_nome from cliente c
                inner join departamento d on c.id_cliente = d.fk_cliente
                order by c.st_nome';
        $rowSetEmpresas = Zend_Db_Table::getDefaultAdapter()->query($sql)->fetchAll();
        $aEmpresas = array();
        foreach ($rowSetEmpresas as $rowEmpresa) {
            $aEmpresas[$rowEmpresa->id_cliente] = $rowEmpresa->st_nome;
        }
        $this->view->aEmpresas  = $aEmpresas;

        if (!$fk_cliente) {
            $fk_cliente = $rowSetEmpresas[0]->id_cliente;
        }
        $this->view->fk_cliente = $fk_cliente;

        $model = new Model_Papel();
        $rowSet = $model->fetchAll(array('fk_papel_imediato is null', 'fk_cliente = ?' => $fk_cliente));
        $this->view->treeView = $model->getTree($rowSet, 0, 100);

        $usuario = new Model_Usuario();
        $rowSetUsuarios = $usuario->fetchAll();
        $aUsuarios = array();
        foreach ($rowSetUsuarios as $rowUsuario) {
            $aUsuarios[$rowUsuario->id_usuario] = $rowUsuario;
        }
        $this->view->aUsuarios = $aUsuarios;
    }

    /**
     * Carregar o row para passar para a view
     * @return void
     */
    public function formularioAction()
    {
        if ($this->_hasParam('id_papel')) {
            $this->_setParam('id', $this->_getParam('id_papel'));
        }
        parent::formularioAction();
    }

    /**
     * Carrega dados que não são do model relacionado com o controller
     * @return void
     */
    protected function _carregarExtrasFormulario()
    {
        if ($this->_hasParam('fk_cliente')) {
            $this->view->row->fk_cliente = $this->_getParam('fk_cliente');
        }
        return parent::_carregarExtrasFormulario();
    }

    /**
     * Chamado depois do gravar, pode ser utilizado para redirecionar o usuário para actions dependendo de valores
     * @param $id
     * @param array $aInfoExtra - Array de Informações Extra
     * @return void
     */
    protected function posGravar($id = null, $aInfoExtra = array())
    {
        if (!$this->_getParam('id_papel')) {
            $this->_redirect('corporativo/papel/formulario/id/' . $id);
        }
    }

    public function atividadesAction()
    {
        $id_papel = $this->_getParam('id_papel');
        $sql = 'select a.st_nome, a.st_codigo, pa.id_papel_atividade from org_atividade a
                inner join papel_atividade pa on a.id_atividade = pa.fk_atividade
                where pa.fk_papel = ' . $id_papel . ' order by a.st_codigo';
        $rowSet = Zend_Db_Table::getDefaultAdapter()->query($sql)->fetchAll();
        $this->view->rowSetAtividades = $rowSet;
    }

    public function usuariosAction()
    {
        $id_papel = $this->_getParam('id_papel');

        $sql = 'select u.st_nome, pu.id_papel_usuario from usuario u
                inner join papel_usuario pu on u.id_usuario = pu.fk_usuario
                where pu.fk_papel = ' . $id_papel . ' order by u.st_nome';
        $rowSet = Zend_Db_Table::getDefaultAdapter()->query($sql)->fetchAll();
        $this->view->rowSetUsuarioPapel = $rowSet;
    }

    public function relacionarUsuarioAction()
    {
        $this->_helper->layout()->disableLayout();
        $fk_papel = $this->_getParam('id_papel');
        if ($this->getRequest()->isPost()) {
            $aUsuarios = (array) $this->_getParam('aUsuarios');
            $model = new Model_PapelUsuario();
            //$model->delete('fk_papel = ' . $fk_papel);
            foreach ($aUsuarios as $idUsuario) {
                $dados['fk_usuario'] = $idUsuario;
                $dados['fk_papel']   = $fk_papel;
                $model->createRow($dados)->save();
            }
            $this->_addMessage('Usuários relacionados', 'corporativo/papel/formulario/id_papel/' . $fk_papel);
        }
        $usuario = new Model_Usuario();
        $rowSetUsuario = $usuario->fetchAll();

        $modelPapel = new Model_Papel();
        $rowPapel = $modelPapel->find($fk_papel)->current();

        $aUsuariosCliente = array();
        $rowSetUsuarioPapel = $rowPapel->findModel_UsuarioViaModel_PapelUsuario();
        foreach ($rowSetUsuarioPapel as $rowUsuario) {
            $aUsuariosCliente[$rowUsuario->id_usuario] = true;
        }

        $rowSetUsuarioView = array();
        foreach ($rowSetUsuario as $rowUsuario) {
            if (isset($aUsuariosCliente[$rowUsuario->id_usuario])) {
                continue;
            }
            $rowSetUsuarioView[] = $rowUsuario;
        }

        $this->view->fk_papel = $fk_papel;
        $this->view->rowSetUsuario = $rowSetUsuarioView;
    }


    public function documentoAction()
    {
        $id_papel = $this->_getParam('id_papel');

        $modelPapel = new Model_Papel();
        $rowPapel = $modelPapel->find($id_papel)->current();
        $this->view->rowPapel = $rowPapel;

        $modelAtividade = new Model_PapelAtividade();
        $this->view->rowSetAtividades = $modelAtividade->fetchAll(array('fk_papel = ?' => $id_papel), 'nr_ordem');

        $this->view->bHtml = $this->_hasParam('html', false);
        $html = $this->view->render('papel/documento.phtml');

        if ($this->_hasParam('html', false)) {
            echo $html; die;
        }

        $rowDepartamento = $rowPapel->findParentModel_Departamento();

        $nomeArquivo = $rowPapel->st_codigo . '.pdf';

        $pdf = new App_Pdf();
        $pdf->preparar($rowDepartamento->st_nome, 'Gestão da Qualidade', 'FORM. 0001 ', 'alfa');
        $pdf->AddPage();
        $pdf->SetFont('helvetica', '', 8);
        $pdf->writeHTML($html, true, false, false, false, '');
        $pdf->Output($nomeArquivo, 'I'); die;
    }
}